웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > sql

[PHP] db에 텍스트 저장시 문자 깨지는 인코딩 문제 해결하는 방법

Last Modified : 2018-02-22 / Created : 2015-10-12
8,585
View Count
클라이언트와 서버, 서버와 데이터베이스 사이를 연결하면서 자주 나타나는 문제중 하나가 바로 인코딩 문제입니다. 오늘 알아볼 내용은 바로 PHP 서버에서 데이터베이스에 내용을 저장할때 문자가 깨지는 경우 이를 해결하는 방법을 알아봅니다.




# PHP 서버, 데이터베이스 사이에 문자 깨짐 현상 해결하기

먼저 어디에 문제가 나타나는지 알아야합니다. 이를 확인하기 위해서 인코딩 문제가 발생했다면 발생가능한 위치는 아래와 같이 세 곳을 의심할 수 있습니다.

1. 방문자(클라이언트)에서 보내는 데이터 인코딩 문제
2. PHP등의 서버언어에서 발생하는 문제
3. 서버에서 데이터베이스로 보낼때 발생하는 문제

1번과 2번 모두 UTF-8과 같이 한글 인코딩 설정에 문제가 없더라 하더라도 서버에서 db로 텍스트를 전송할 때 db 인코딩 값에 문제가 있을 수 있습니다. 이 때 해결할 수 있는 방법으로 아래 과정을 참고하세요.


하나. 먼저 데이터베이스의 인코딩 기본값을 확인한다.
; DB를 설정할 경우에 DB에 사용할 인코딩 값을 설정하는데 이 값이 utf-8이 아니라면 아무리 utf-8로 서버에서 전송해도 데이터베이스에 저장되는 값의 인코딩이 잘못될 수 있습니다.


둘. php에서 서버에 전송시 쿼리 인코딩값 설정
; 서버에 전송시 설정하기 인코딩을 설정합니다. 아래의 mysql_query() 함수를 사용합니다.
<?php
  header("Content-Type: text/html; charset=utf-8"); 
  $dbc = mysqli_connect("localhost","id","pass","dbname");
  if (mysqli_connect_error($dbc)){
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

  // Set up db encoding type
  mysql_query("SET session character_set_client = 'UTF8'");
  mysql_query("SET session character_set_connection = 'UTF8'");
  mysql_query("SET session character_set_results = 'UTF8'");
  mysql_query("SET session character_set_server = 'UTF8'");
?>

PHP의 상단에 header를 사용하여 인코딩값을 설정할 수 있습니다. 이 부분이 빠져있는지 역시 매우 중요합니다.

Previous

[SQL] 문자 바꾸기, 치환, 변환 replace()

Previous

[sql] 인덱스(indexes) 테이블이란? 간단하게 설정하는 방법